
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Main {

public static void AgregarProducto(TSupermercado geant){
	TElemento elemento;
	String codigoBarras =JOptionPane.showInputDialog("Código de Barras: ");   
	String nombre =JOptionPane.showInputDialog("Nombre: "); 
	String stock = JOptionPane.showInputDialog("Stock: ");
	String precio =  JOptionPane.showInputDialog("Precio: ");
	try
	{
	       Integer.parseInt(stock);
	       Integer.parseInt(precio);
	       Integer.parseInt(codigoBarras);
		if(codigoBarras != null ){
			if (geant.IncorporarProducto(codigoBarras, nombre, Double.valueOf(stock), Integer.parseInt(stock)) == true){
				JOptionPane.showMessageDialog(null, "Elemento insertado");
			}else{
				JOptionPane.showMessageDialog(null, "No fue posible insertar");
			}
		}
	}

	catch (NumberFormatException e)
	{
		JOptionPane.showMessageDialog(null, "ALgun dato fue al ingresado,No fue posible insertar");
	} 
	
}

public static  void QuitarProducto(TSupermercado geant){
	Comparable eliminar;
	eliminar =JOptionPane.showInputDialog("Elemento a Eliminar");  
	if(eliminar != null){
		if (geant.QuitarProducto(eliminar)){
			JOptionPane.showMessageDialog(null, "Elemento eliminado");
		}else{
			JOptionPane.showMessageDialog(null, "Elemento no Eliminado");
		}
	}	
}

public static void VenderProducto(TSupermercado geant){
	Comparable buscar;
	Integer cantidad;
	try{
	buscar = JOptionPane.showInputDialog("Clave a Buscar");
	cantidad = Integer.parseInt(JOptionPane.showInputDialog("Cantidad: "));
	if(buscar != null){
		Integer.parseInt((String) buscar);
	    if (geant.QuitarStock(buscar, cantidad)){
			JOptionPane.showMessageDialog(null, "Se vendio el producto");
		}else{
			JOptionPane.showMessageDialog(null, "Elemento no encontrado");
		}
	}
	}
    catch (Exception e)
    {
            JOptionPane.showMessageDialog(null, "No fue Vender el producto" );
    } 
	
	
}

public static void AgregarStock(TSupermercado geant){
	
	try
	{
		String codigoBarras =JOptionPane.showInputDialog("Código de Barras: ");   
		Integer stock = Integer.parseInt(JOptionPane.showInputDialog("Stock: "));
		if(codigoBarras != null ){
			Integer.parseInt(codigoBarras);
			if (geant.AgregarStock(codigoBarras, stock) == true){
				JOptionPane.showMessageDialog(null, "Se agrego el stock");
			}else{
				JOptionPane.showMessageDialog(null, "NO fue posible agregar Stock");
			}
		}
	}

	catch (NumberFormatException e)
	{
		JOptionPane.showMessageDialog(null, "No fue posible agregar Stock");
	} 
	
}

public static void ListarProductos(TSupermercado geant){
	Comparable buscar;
	String cantidad;
	buscar =JOptionPane.showInputDialog("Clave a Buscar");
	cantidad =JOptionPane.showInputDialog("Cantidad: ");
	if(buscar != null){

		if (geant.AgregarStock(buscar, Integer.parseInt(cantidad))){
			JOptionPane.showMessageDialog(null, "Se agrego el stock de producto");
		}else{
			JOptionPane.showMessageDialog(null, "Elemento no encontrado");
		}
	}
}


public static void GenerarCompra(TSupermercado geant){
	String ruta = JOptionPane.showInputDialog("Ingrese la ruta del archivo: por ejemplo C:\\\\temp\\\\lista.txt");
	try
	{
		if( ruta != null && ruta.trim() != "" ){


			String[] elementos = geant.productos.getProductos().devolverPalabras(ruta);
			double acumulado=0;
			int error = 0;
			int ingresaron = 0;
			int ValidaStock = elementos.length;
			for (String medioElemento : elementos){
				int stock =  geant.productos.buscarPorCodigo(medioElemento.split(";")[0]).getStock();				
				if(geant.QuitarStock(medioElemento.split(";")[0], Integer.parseInt(medioElemento.split(";")[1]))){
				    if ((geant.productos.buscarPorCodigo(medioElemento.split(";")[0]).getStock()) == 
				    		(stock - Integer.parseInt(medioElemento.split(";")[1])))
				    		{
				    	ValidaStock++;
				    }
					acumulado =  acumulado + (Integer.parseInt(medioElemento.split(";")[1]) * (geant.productos.buscarPorCodigo(medioElemento.split(";")[0]).getPrecio()));
					ingresaron ++;
				}else{
					error ++;			
			}
			
		}
			JOptionPane.showMessageDialog(null, "Se insertaron : " + ingresaron + " productos del archivo. No se pudieron Ingresar:" + error + " productos.");						
			JOptionPane.showMessageDialog(null, "Total: " + acumulado);
			if (ValidaStock == ingresaron ){
				JOptionPane.showMessageDialog(null, "Stock Validado");
			}else{
				JOptionPane.showMessageDialog(null, "No se actualizo todo el Stock");
			}
		
			
	}

	}
	catch (Exception e)
	{
		JOptionPane.showMessageDialog(null, "No fue posible insertar");
	} 

}

public static void IntercalarDisco(TSupermercado geant){
	String ruta = JOptionPane.showInputDialog("Ingrese la ruta del archivo: por ejemplo C:\\\\temp\\\\lista.txt");
	try
	{
		if( ruta != null && ruta.trim() != "" ){


			String[] elementos = geant.productos.getProductos().devolverPalabras(ruta);
			for (String medioElemento : elementos){
				String aux=medioElemento.split(";")[1];
				if( geant.productos.buscarPorCodigo((medioElemento.split(";")[0]))!= null){
						
					geant.AgregarStock(medioElemento.split(";")[0], Integer.valueOf(aux));
					JOptionPane.showMessageDialog(null, "Se insertaron los elementos del archivo. ");
				}
				else{
					//CODIGO;CANTIDAD;NOMBRE;STOCK
					geant.IncorporarProducto(medioElemento.split(";")[0], medioElemento.split(";")[2], Double.valueOf(medioElemento.split(";")[3]), Integer.valueOf(aux));
				}
					
					
					
						

			}
		}
	}


	catch (Exception e)
	{
		System.out.println(e.getMessage());
		JOptionPane.showMessageDialog(null, "No fue posible insertar");
	} 

}


	@SuppressWarnings("unused")
	public static void main(String[] args) {
		Main main = new Main();
		//main.leer("numeros.txt");
		TSupermercado geant = new TSupermercado();

		Object opcion = null ;//se crea una variable que recibirá la opción 

		do{//comienzo del ciclo
			opcion = JOptionPane.showInputDialog(null,"Opciones", null, JOptionPane.QUESTION_MESSAGE, null,  new Object[] 
					{ "1 - Agregar un nuevo producto a la cartera", 
					"2 - Quitar producto de cartera", 
					"3 - Vender producto", 
					"4 - Agregar stock de producto", 
					"5 - Listar Productos ",
					"6 - Generar compra", 
					"7 - Intercalar Productos", 
					"0 - Salir" }, "0");                             
			if(opcion== null){
				System.exit(0);
			}
			if(opcion.equals("1 - Agregar un nuevo producto a la cartera")){
				AgregarProducto(geant);
			}
			else if(opcion.equals("2 - Quitar producto de cartera")){
				QuitarProducto(geant);
			}
			else if(opcion.equals("3 - Vender producto")){
				VenderProducto(geant);	
			}
			else if(opcion.equals("4 - Agregar stock de producto")){
				AgregarStock(geant);
			}
			else if(opcion.equals("5 - Listar Productos ")){
				JTextArea textArea;
				if (geant.getCantidadProductos()<=15){
				  textArea = new JTextArea();
				}
				else{
				 textArea = new JTextArea(30,60);
				}
			      textArea.setText(geant.ListarProductos());
			      textArea.setEditable(false);
			      
			      // sse crea un scroll pane con un textarea
			      JScrollPane scrollPane = new JScrollPane(textArea);
			      
			      // despliega el mensaje con scroll si es necesario
			      JOptionPane.showMessageDialog(null, scrollPane);
				
			}
			
			else if(opcion.equals("6 - Generar compra")){
				GenerarCompra(geant);
			}
			else if(opcion.equals("7 - Intercalar Productos")){
				IntercalarDisco(geant);
				
			}

			else if(opcion.equals("0")){
				System.exit(0);//comando para cerrar las aplicaciones
			}
			else
			{
				JOptionPane.showMessageDialog(null, "Ingrese una opcion valida");
			}
		}while(!opcion.equals("0")|| opcion != null);//finaliza el ciclo con la condicional que hay dentro del while
		//final del método principal

	}

}

